﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;
using XLua;
using AssetBundleHelper;

[LuaCallCSharp]
public delegate void DelegateABObject(ABObject obj);
/// <summary>
/// xlua自定义导出
/// </summary>
public static class XLuaCustomExport
{
	/// <summary>
	/// dotween的扩展方法在lua中调用
	/// </summary>
	[LuaCallCSharp]
	[ReflectionUse]
	public static List<Type> dotween_lua_call_cs_list = new List<Type>()
	{
		#region DoTween
		typeof(DG.Tweening.AutoPlay),
		typeof(DG.Tweening.AxisConstraint),
		typeof(DG.Tweening.Ease),
		typeof(DG.Tweening.LogBehaviour),
		typeof(DG.Tweening.LoopType),
		typeof(DG.Tweening.PathMode),
		typeof(DG.Tweening.PathType),
		typeof(DG.Tweening.RotateMode),
		typeof(DG.Tweening.ScrambleMode),
		typeof(DG.Tweening.TweenType),
		typeof(DG.Tweening.UpdateType),
		
		typeof(DG.Tweening.DOTween),
		typeof(DG.Tweening.DOVirtual),
		typeof(DG.Tweening.EaseFactory),
		typeof(DG.Tweening.Tweener),
		typeof(DG.Tweening.Tween),
		typeof(DG.Tweening.Sequence),
		typeof(DG.Tweening.TweenParams),
		typeof(DG.Tweening.Core.ABSSequentiable),
		
		typeof(DG.Tweening.Core.TweenerCore<Vector3, Vector3, DG.Tweening.Plugins.Options.VectorOptions>),
		
		typeof(DG.Tweening.TweenCallback),
		typeof(DG.Tweening.TweenExtensions),
		typeof(DG.Tweening.TweenSettingsExtensions),
		typeof(DG.Tweening.ShortcutExtensions),
		#endregion

		#region HotUI
		typeof(HotUI.BaseSceneCtrl),
		typeof(HotUI.LuaView),
		typeof(HotUI.MyLuaBehaviour),
		#endregion

		#region SimpleServer
		typeof(SimpleServer.SimpleServerMgr),
		#endregion

		#region Net
		typeof(NetHelper),
		#endregion

		#region GameTool
		typeof(DelegateABObject),
		typeof(LuaGameTool),
		#endregion
		
		//dotween pro 的功能
		//typeof(DG.Tweening.DOTweenPath),
		//typeof(DG.Tweening.DOTweenVisualManager),
		typeof(System.Action<ABObject>),
		typeof(ABObject),
	};

	[CSharpCallLua]
	[ReflectionUse]
	public static List<Type> dotween_cs_call_lua_list = new List<Type>()
	{
	
		typeof(System.Action<ABObject>),
		typeof(DelegateNetData),
		typeof(DelegateNet),
	};
}